package com.mayn.action;


import org.apache.commons.lang.StringEscapeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import com.mayn.common.TaobaoApiConfig;
import com.mayn.common.TradeObject;
import com.taobao.api.ApiException;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.TradeFullinfoGetRequest;
import com.taobao.api.response.TradeFullinfoGetResponse;

import net.sf.json.JSONObject;

/*
 * 淘宝订单查询
 */
public class JdpTbTradeAction {
	
	private static final Logger LOG = LoggerFactory.getLogger(JdpTbTradeAction.class);
	
	static String url = TaobaoApiConfig.JstUrl;
	
	
	/**
	 * trade_get_response
	 * @param shopId
	 * @param tid
	 * @return
	 */
	public static TradeObject getTradeInfo(int shopId, String tid) {
		TradeObject jdpTbTradeObject = getTradeFullInfo(shopId, tid);
		if (jdpTbTradeObject.getRetCode() == 1) {
			String tradeInfo = jdpTbTradeObject.getTrade().replace("trade_fullinfo_get_response", "trade_get_response");
			jdpTbTradeObject.setTrade(tradeInfo);
		}
		return jdpTbTradeObject;
	}
	
	/**
	 * trade_fullinfo_get_response
	 * @param shopId
	 * @param tid
	 * @return
	 */
	public static TradeObject getTradeFullInfo(int shopId, String tid) {
		TradeObject jdpTbTradeObject = new TradeObject();
		String getSellerNickSql = "select SHOP_NAME from shop where SHOP_ID='" + shopId + "'";
		Record getSellerNickRec = Db.findFirst(getSellerNickSql);
		String seller_nick = "";
		if (getSellerNickRec != null) {
			seller_nick = getSellerNickRec.getStr("SHOP_NAME");
			//第一次从聚石塔服务器数据库查询订单
			String getJsonSql = "select jdp_response from jdp_tb_trade where seller_nick = '" + seller_nick + "' and tid = '" + tid + "'";
			Record getTradeInfo = Db.findFirst(getJsonSql);
			//第二次从RDS数据库查询订单
			if (getTradeInfo == null) {
				//API数据库不存在则直接从聚石塔RDS获取订单
				getJsonSql = "select jdp_response from jdp_tb_trade where seller_nick = '" + seller_nick + "' and tid = '" + tid + "'";
				getTradeInfo = Db.use("jst").findFirst(getJsonSql);
			}
			//第三次调用淘宝API查询订单
			if (getTradeInfo == null) {
				TradeObject o = getTradeFullInfoByApi(shopId,tid);
				if(o.getRetCode()==1){
					String msg = "淘宝API订单查询成功:" + shopId + "--" + seller_nick + "--" + tid;
					LOG.info(msg);
					jdpTbTradeObject.setRetCode(1);
					jdpTbTradeObject.setRetMsg(msg);
					jdpTbTradeObject.setTrade(o.getTrade());
					return jdpTbTradeObject;
				}
			}
			if (getTradeInfo != null) {
				String tradeInfo = getTradeInfo.getStr("jdp_response");
				if(tradeInfo!=null){
					try{
						JSONObject object = JSONObject.fromObject(tradeInfo);
						tradeInfo =  object.toString();
					}catch(Exception e){
						TradeObject tradeObject = new TradeObject(); 
						tradeObject = JdpTbTradeAction.getTradeFullInfoByApi(shopId, tid);
						if(tradeObject.getRetCode()==1){
							tradeInfo =  tradeObject.getTrade();
						}
						else{
							String msg = "订单不存在:" + shopId + "--" + seller_nick + "--" + tid;
							LOG.error(msg);
							jdpTbTradeObject.setRetCode(2);
							jdpTbTradeObject.setRetMsg(msg);
							jdpTbTradeObject.setTrade("{}");
							return jdpTbTradeObject;
						}
					}
				}
				String msg = "订单查询成功:" + shopId + "--" + seller_nick + "--" + tid;
				LOG.debug(msg);
				jdpTbTradeObject.setRetCode(1);
				jdpTbTradeObject.setRetMsg(msg);
				jdpTbTradeObject.setTrade(tradeInfo);
				return jdpTbTradeObject;
			} else {
				String msg = "订单不存在:" + shopId + "--" + seller_nick + "--" + tid;
				LOG.error(msg);
				jdpTbTradeObject.setRetCode(2);
				jdpTbTradeObject.setRetMsg(msg);
				jdpTbTradeObject.setTrade("{}");
				return jdpTbTradeObject;
			}
		} else {
			String msg = "店铺不存在:" + shopId + "--" + seller_nick + "--" + tid;
			LOG.error(msg);
			jdpTbTradeObject.setRetCode(3);
			jdpTbTradeObject.setRetMsg(msg);
			jdpTbTradeObject.setTrade("{}");
			return jdpTbTradeObject;
		}
	}
	
	/**
	 * 调用淘宝API查询订单
	 * @param shopId
	 * @param tid
	 * @return
	 */
	public static TradeObject getTradeInfoByApi(int shopId, String tid) {
		TradeObject jdpTbTradeObject = getTradeFullInfoByApi(shopId, tid);
		if (jdpTbTradeObject.getRetCode() == 1) {
			String tradeInfo = jdpTbTradeObject.getTrade().replace("trade_fullinfo_get_response", "trade_get_response");
			jdpTbTradeObject.setTrade(tradeInfo);
		}
		return jdpTbTradeObject;
	}
	
	/**
	 * 调用淘宝API查询订单
	 * @param shopId
	 * @param tid
	 * @return
	 */
	public static TradeObject getTradeFullInfoByApi(int shopId, String tid) {
		TradeObject jdpTbTradeObject = new TradeObject();
		String getShopSql = "select SHOP_ID,SHOP_NAME,SHOP_API_APP_KEY,SHOP_API_ACCESS_TOKEN,SHOP_API_APP_SECRECT from shop where SHOP_ID='" + shopId + "'";
		Record getShopRec = Db.findFirst(getShopSql);
		String seller_nick = "";
		if (getShopRec != null) {
			seller_nick = getShopRec.getStr("SHOP_NAME");
			String sessionKey = getShopRec.getStr("SHOP_API_ACCESS_TOKEN");
			String appkey = getShopRec.getStr("SHOP_API_APP_KEY");
			String secret = getShopRec.getStr("SHOP_API_APP_SECRECT");
			
			TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret);
			TradeFullinfoGetRequest req = new TradeFullinfoGetRequest();
			req.setFields(getFields());
			req.setTid(Long.parseLong(tid));
			TradeFullinfoGetResponse response = null;
			try {
				response = client.execute(req, sessionKey);
			} catch (ApiException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (response != null ) {
				String msg = "订单查询成功:" + shopId + "--" + seller_nick + "--" + tid;
				LOG.debug(msg);
				jdpTbTradeObject.setRetCode(1);
				jdpTbTradeObject.setRetMsg(msg);
				jdpTbTradeObject.setTrade(response.getBody());
				return jdpTbTradeObject;
			}else{
				String msg = "订单不存在:" + shopId + "--" + seller_nick + "--" + tid;
				LOG.error(msg);
				jdpTbTradeObject.setRetCode(2);
				jdpTbTradeObject.setRetMsg(msg);
				jdpTbTradeObject.setTrade("{}");
				return jdpTbTradeObject;
			}
		} else {
			String msg = "店铺不存在:" + shopId + "--" + seller_nick + "--" + tid;
			LOG.error(msg);
			jdpTbTradeObject.setRetCode(3);
			jdpTbTradeObject.setRetMsg(msg);
			jdpTbTradeObject.setTrade("{}");
			return jdpTbTradeObject;
		}
	}
	
	/**
	 * 获取订单状态
	 * @param shopId
	 * @param tid
	 * @return
	 */
	public static String getWebStatus(int shopId, String tid) {
		TradeObject jdpTbTradeObject = getTradeFullInfo(shopId, tid);
		if (jdpTbTradeObject.getRetCode() == 1) {
			JSONObject jo = JSONObject.fromObject(jdpTbTradeObject.getTrade());
			String webStatus = jo.getJSONObject("trade_fullinfo_get_response").getJSONObject("trade").getString("status");
			return webStatus;
		}
		return "";
	}
	
	/**
	 * RDS单个订单查询
	 * @param tid
	 * @return
	 */
	
	public static String getTradeByTid(String tid){
		String ret = "{}";
		String getJsonSql = "select jdp_response from jdp_tb_trade where tid = '" + tid + "'";
		Record getTradeInfo = Db.findFirst(getJsonSql);
		if (getTradeInfo == null) {
			//API数据库不存在则直接从聚石塔RDS获取订单
			getJsonSql = "select jdp_response from jdp_tb_trade where tid = '" + tid + "'";
			getTradeInfo = Db.use("jst").findFirst(getJsonSql);
		}
		if (getTradeInfo != null) {
			String tradeInfo = getTradeInfo.getStr("jdp_response");
			if(tradeInfo!=null){
				try{
					JSONObject object = JSONObject.fromObject(tradeInfo);
					ret =  object.toString();
				}catch(Exception e){
					ret =  StringEscapeUtils.unescapeJava(tradeInfo.toString());
				}
			}
			String msg = "订单查询成功:" + "--" + tid;
			LOG.info(msg);
			return ret;
		} else {
			return null;
		}
	}
	
	public static String getTradeByTid(int shopId,String tid){
		String ret = "{}";
		String getJsonSql = "select jdp_response from jdp_tb_trade where tid = '" + tid + "'";
		Record getTradeInfo = Db.findFirst(getJsonSql);
		if (getTradeInfo == null) {
			//API数据库不存在则直接从聚石塔RDS获取订单
			getJsonSql = "select jdp_response from jdp_tb_trade where tid = '" + tid + "'";
			getTradeInfo = Db.use("jst").findFirst(getJsonSql);
		}
		if (getTradeInfo != null) {
			String tradeInfo = getTradeInfo.getStr("jdp_response");
			if(tradeInfo!=null){
				try{
					JSONObject object = JSONObject.fromObject(tradeInfo);
					ret =  object.toString();
				}catch(Exception e){
					//ret =  StringEscapeUtils.unescapeJava(tradeInfo.toString());
					TradeObject tradeObject = new TradeObject(); 
					tradeObject = JdpTbTradeAction.getTradeFullInfoByApi(shopId, tid);
					if(tradeObject.getRetCode()==1){
						ret =  tradeObject.getTrade();
					}
				}
			}
			String msg = "订单查询成功:" + "--" + tid;
			LOG.info(msg);
			return ret;
		} else {
			return null;
		}
	}
	
	
	public static String getFields(){
		StringBuffer sb = new StringBuffer();
		sb.append("seller_nick").append(",");//卖家昵称
		sb.append("pic_path").append(",");//商品图片绝对途径
		sb.append("payment").append(",");//实付金额。精确到2位小数;单位:元。如:200.07，表示:200元7分
		sb.append("snapshot_url").append(",");//交易快照地址
		sb.append("seller_rate").append(",");//卖家是否已评价。可选值:true(已评价),false(未评价)
		sb.append("post_fee").append(",");//邮费。精确到2位小数;单位:元。如:200.07，表示:200元7分
		sb.append("buyer_alipay_no").append(",");//买家支付宝账号
		sb.append("receiver_name").append(",");//收货人的姓名
		sb.append("receiver_state").append(",");//收货人的所在省份
		sb.append("receiver_address").append(",");//收货人的详细地址
		sb.append("receiver_zip").append(",");//收货人的邮编
		sb.append("receiver_mobile").append(",");//收货人的手机号码
		sb.append("receiver_phone").append(",");//收货人的电话号码
		sb.append("consign_time").append(",");//卖家发货时间。格式:yyyy-MM-dd HH:mm:ss
		sb.append("seller_alipay_no").append(",");//卖家支付宝账号
		sb.append("seller_mobile").append(",");//卖家手机
		sb.append("seller_phone").append(",");//卖家电话
		sb.append("seller_name").append(",");//卖家姓名
		sb.append("seller_email").append(",");//卖家邮件地址
		sb.append("available_confirm_fee").append(",");//交易中剩余的确认收货金额（这个金额会随着子订单确认收货而不断减少，交易成功后会变为零）。精确到2位小数;单位:元。如:200.07，表示:200 元7分
		sb.append("received_payment").append(",");//卖家实际收到的支付宝打款金额（由于子订单可以部分确认收货，这个金额会随着子订单的确认收货而不断增加，交易成功后等于买家实付款减去退款金额）。精确到2位小数;单位:元。如:200.07，表示:200元7分
		sb.append("timeout_action_time").append(",");//超时到期时间。格式:yyyy-MM-dd HH:mm:ss。业务规则：前提条件：只有在买家已付款，卖家已发货的情况下才有效如果申请了退款，那么超时会落在子订单上；比如说3笔ABC，A申请了，那么返回的是BC的列表, 主定单不存在如果没有申请过退款，那么超时会挂在主定单上；比如ABC，返回主定单，ABC的超时和主定单相同
		sb.append("promotion").append(",");//交易促销详细信息
		sb.append("promotion_details").append(",");//优惠详情
		sb.append("shop_code").append(",");//线下自提门店编码
		sb.append("est_con_time").append(",");//商家的预计发货时间
		sb.append("invoice_kind").append(",");//发票类型（ 1 电子发票 2 纸质发票 ）
		sb.append("receiver_country").append(",");//收货人国籍
		sb.append("receiver_town").append(",");//收货人街道地址
		sb.append("is_3D").append(",");//是否3D交易
		sb.append("et_ser_time").append(",");//天猫汽车服务预约时间
		sb.append("et_shop_name").append(",");//电子凭证预约门店地址
		sb.append("et_verified_shop_name").append(",");//电子凭证核销门店地址
		sb.append("et_plate_number").append(",");//车牌号码
		sb.append("order_tax_fee").append(",");//天猫国际官网直供主订单关税税费
		sb.append("tid").append(",");//交易编号 (父订单的交易编号)
		sb.append("num").append(",");//商品购买数量。取值范围：大于零的整数,对于一个trade对应多个order的时候（一笔主订单，对应多笔子订单），num=0，num是一个跟商品关联的属性，一笔订单对应多比子订单的时候，主订单上的num无意义。
		sb.append("num_iid").append(",");//商品数字编号
		sb.append("status").append(",");//交易状态。可选值: * TRADE_NO_CREATE_PAY(没有创建支付宝交易) * WAIT_BUYER_PAY(等待买家付款) * SELLER_CONSIGNED_PART(卖家部分发货) * WAIT_SELLER_SEND_GOODS(等待卖家发货,即:买家已付款) * WAIT_BUYER_CONFIRM_GOODS(等待买家确认收货,即:卖家已发货) * TRADE_BUYER_SIGNED(买家已签收,货到付款专用) * TRADE_FINISHED(交易成功) * TRADE_CLOSED(付款以后用户退款成功，交易自动关闭) * TRADE_CLOSED_BY_TAOBAO(付款以前，卖家或买家主动关闭交易) * PAY_PENDING(国际信用卡支付付款确认中) * WAIT_PRE_AUTH_CONFIRM(0元购合约中)
		sb.append("title").append(",");//交易标题，以店铺名作为此标题的值。注:taobao.trades.get接口返回的Trade中的title是商品名称
		sb.append("type").append(",");//交易类型列表，同时查询多种交易类型可用逗号分隔。默认同时查询guarantee_trade, auto_delivery, ec, cod的4种交易类型的数据 可选值 fixed(一口价) auction(拍卖) guarantee_trade(一口价、拍卖) auto_delivery(自动发货) independent_simple_trade(旺店入门版交易) independent_shop_trade(旺店标准版交易) ec(直冲) cod(货到付款) fenxiao(分销) game_equipment(游戏装备) shopex_trade(ShopEX交易) netcn_trade(万网交易) external_trade(统一外部交易)o2o_offlinetrade（O2O交易）step (万人团)nopaid(无付款订单)pre_auth_type(预授权0元购机交易)
		sb.append("price").append(",");//商品价格。精确到2位小数；单位：元。如：200.07，表示：200元7分
		sb.append("seller_cod_fee").append(",");//卖家货到付款服务费。精确到2位小数;单位:元。如:12.07，表示:12元7分。卖家不承担服务费的订单：未发货的订单获取服务费为0，发货后就能获取到正确值。
		sb.append("discount_fee").append(",");//建议使用trade.promotion_details查询系统优惠系统优惠金额（如打折，VIP，满就送等），精确到2位小数，单位：元。如：200.07，表示：200元7分
		sb.append("point_fee").append(",");//买家使用积分,下单时生成，且一直不变。格式:100;单位:个.
		sb.append("has_post_fee").append(",");//是否包含邮费。与available_confirm_fee同时使用。可选值:true(包含),false(不包含)
		sb.append("total_fee").append(",");//商品金额（商品价格乘以数量的总金额）。精确到2位小数;单位:元。如:200.07，表示:200元7分
		sb.append("sid").append(",");//物流运单号
		sb.append("is_lgtype").append(",");//是否保障速递，如果为true，则为保障速递订单，使用线下联系发货接口发货，如果未false，则该订单非保障速递，根据卖家设置的订单流转规则可使用物流宝或者常规物流发货。
		sb.append("is_brand_sale").append(",");//表示是否是品牌特卖（常规特卖，不包括特卖惠和特实惠）订单，如果是返回true，如果不是返回false。当此字段与is_force_wlb均为true时，订单强制物流宝发货。
		sb.append("is_force_wlb").append(",");//订单是否强制使用物流宝发货。当此字段与is_brand_sale均为true时，订单强制物流宝发货。此字段为false时，该订单根据流转规则设置可以使用物流宝或者常规方式发货
		sb.append("created").append(",");//交易创建时间。格式:yyyy-MM-dd HH:mm:ss
		sb.append("pay_time").append(",");//付款时间。格式:yyyy-MM-dd HH:mm:ss。订单的付款时间即为物流订单的创建时间。
		sb.append("modified").append(",");//交易修改时间(用户对订单的任何修改都会更新此字段)。格式:yyyy-MM-dd HH:mm:ss
		sb.append("end_time").append(",");//交易结束时间。交易成功时间(更新交易状态为成功的同时更新)/确认收货时间或者交易关闭时间 。格式:yyyy-MM-dd HH:mm:ss
		sb.append("buyer_message").append(",");//买家留言
		sb.append("alipay_id").append(",");//买家的支付宝id号，在UIC中有记录，买家支付宝的唯一标示，不因为买家更换Email账号而改变。
		sb.append("alipay_no").append(",");//支付宝交易号，如：2009112081173831
		sb.append("buyer_memo").append(",");//买家备注（与淘宝网上订单的买家备注对应，只有买家才能查看该字段）
		sb.append("buyer_flag").append(",");//买家备注旗帜（与淘宝网上订单的买家备注旗帜对应，只有买家才能查看该字段）红、黄、绿、蓝、紫 分别对应 1、2、3、4、5
		sb.append("seller_memo").append(",");//卖家备注（与淘宝网上订单的卖家备注对应，只有卖家才能查看该字段）
		sb.append("seller_flag").append(",");//卖家备注旗帜（与淘宝网上订单的卖家备注旗帜对应，只有卖家才能查看该字段）红、黄、绿、蓝、紫 分别对应 1、2、3、4、5
		sb.append("invoice_name").append(",");//发票抬头
		sb.append("invoice_type").append(",");//发票类型
		sb.append("buyer_nick").append(",");//买家昵称
		sb.append("buyer_area").append(",");//买家下单的地区
		sb.append("buyer_email").append(",");//买家邮件地址
		sb.append("buyer_ip").append(",");//买家下单的IP信息，仅供taobao.trade.fullinfo.get查询返回。需要对返回结果进行Base64解码。
		sb.append("has_yfx").append(",");//订单中是否包含运费险订单，如果包含运费险订单返回true，不包含运费险订单，返回false
		sb.append("yfx_fee").append(",");//订单的运费险，单位为元
		sb.append("yfx_id").append(",");//运费险支付号
		sb.append("yfx_type").append(",");//运费险类型
		sb.append("credit_card_fee").append(",");//使用信用卡支付金额数
		sb.append("step_trade_status").append(",");//分阶段付款的订单状态（例如万人团订单等），目前有三返回状态FRONT_NOPAID_FINAL_NOPAID(定金未付尾款未付)，FRONT_PAID_FINAL_NOPAID(定金已付尾款未付)，FRONT_PAID_FINAL_PAID(定金和尾款都付)
		sb.append("step_paid_fee").append(",");//分阶段付款的已付金额（万人团订单已付金额）
		sb.append("mark_desc").append(",");//订单出现异常问题的时候，给予用户的描述,没有异常的时候，此值为空
		sb.append("eticket_ext").append(",");//电子凭证的垂直信息
		sb.append("send_time").append(",");//订单将在此时间前发出，主要用于预售订单
		sb.append("shipping_type").append(",");//创建交易时的物流方式（交易完成前，物流方式有可能改变，但系统里的这个字段一直不变）。可选值：free(卖家包邮),post(平邮),express(快递),ems(EMS),virtual(虚拟发货)，25(次日必达)，26(预约配送)。
		sb.append("buyer_cod_fee").append(",");//买家货到付款服务费。精确到2位小数;单位:元。如:12.07，表示:12元7分
		sb.append("express_agency_fee").append(",");//快递代收款。精确到2位小数;单位:元。如:212.07，表示:212元7分
		sb.append("adjust_fee").append(",");//卖家手工调整金额，精确到2位小数，单位：元。如：200.07，表示：200元7分。来源于订单价格修改，如果有多笔子订单的时候，这个为0，单笔的话则跟[order].adjust_fee一样
		sb.append("buyer_obtain_point_fee").append(",");//买家获得积分,返点的积分。格式:100;单位:个。返点的积分要交易成功之后才能获得。
		sb.append("cod_fee").append(",");//货到付款服务费。精确到2位小数;单位:元。如:12.07，表示:12元7分。
		sb.append("trade_from").append(",");//交易内部来源。WAP(手机);HITAO(嗨淘);TOP(TOP平台);TAOBAO(普通淘宝);JHS(聚划算)一笔订单可能同时有以上多个标记，则以逗号分隔
		sb.append("cod_status").append(",");//货到付款物流状态。初始状态 NEW_CREATED,接单成功 ACCEPTED_BY_COMPANY,接单失败 REJECTED_BY_COMPANY,接单超时 RECIEVE_TIMEOUT,揽收成功 TAKEN_IN_SUCCESS,揽收失败 TAKEN_IN_FAILED,揽收超时 TAKEN_TIMEOUT,签收成功 SIGN_IN,签收失败 REJECTED_BY_OTHER_SIDE,订单等待发送给物流公司 WAITING_TO_BE_SENT,用户取消物流订单 CANCELED
		sb.append("can_rate").append(",");//买家可以通过此字段查询是否当前交易可以评论，can_rate=true可以评价，false则不能评价。
		sb.append("service_orders").append(",");//服务子订单列表
		sb.append("commission_fee").append(",");//交易佣金。精确到2位小数;单位:元。如:200.07，表示:200元7分
		sb.append("acookie_id").append(",");//Acookie订单唯一ID。
		sb.append("trade_memo").append(",");//交易备注。
		sb.append("buyer_rate").append(",");//买家是否已评价。可选值:true(已评价),false(未评价)。如买家只评价未打分，此字段仍返回false
		sb.append("trade_source").append(",");//交易外部来源：ownshop(商家官网)
		sb.append("seller_can_rate").append(",");//卖家是否可以对订单进行评价
		sb.append("is_part_consign").append(",");//是否是多次发货的订单如果卖家对订单进行多次发货，则为true否则为false
		sb.append("is_daixiao").append(",");//表示订单交易是否含有对应的代销采购单。如果该订单中存在一个对应的代销采购单，那么该值为true；反之，该值为false。
		sb.append("real_point_fee").append(",");//买家实际使用积分（扣除部分退款使用的积分），交易完成后生成（交易成功或关闭），交易未完成时该字段值为0。格式:100;单位:个
		sb.append("receiver_city").append(",");//收货人的所在城市 注：因为国家对于城市和地区的划分的有：省直辖市和省直辖县级行政区（区级别的）划分的，淘宝这边根据这个差异保存在不同字段里面比如：广东广州：广州属于一个直辖市是放在的receiver_city的字段里面；而河南济源：济源属于省直辖县级行政区划分，是区级别的，放在了receiver_district里面 建议：程序依赖于城市字段做物流等判断的操作，最好加一个判断逻辑：如果返回值里面只有receiver_district参数，该参数作为城市
		sb.append("receiver_district").append(",");//收货人的所在地区 注：因为国家对于城市和地区的划分的有：省直辖市和省直辖县级行政区（区级别的）划分的，淘宝这边根据这个差异保存在不同字段里面比如：广东广州：广州属于一个直辖市是放在的receiver_city的字段里面；而河南济源：济源属于省直辖县级行政区划分，是区级别的，放在了receiver_district里面 建议：程序依赖于城市字段做物流等判断的操作，最好加一个判断逻辑：如果返回值里面只有receiver_district参数，该参数作为城市
		sb.append("arrive_interval").append(",");//物流到货时效，单位天
		sb.append("arrive_cut_time").append(",");//物流到货时效截单时间，格式 HH:mm
		sb.append("consign_interval").append(",");//物流发货时效，单位小时
		sb.append("service_tags").append(",");//物流标签
		sb.append("o2o").append(",");//导购宝=crm
		sb.append("o2o_guide_id").append(",");//导购员id
		sb.append("o2o_shop_id").append(",");//导购员门店id
		sb.append("o2o_guide_name").append(",");//导购员名称
		sb.append("o2o_shop_name").append(",");//导购门店名称
		sb.append("o2o_delivery").append(",");//导购宝提货方式，inshop：店内提货，online：线上发货
		sb.append("zero_purchase").append(",");//在返回的trade对象上专门增加一个字段zero_purchase来区分，这个为true的就是0元购机预授权交易
		sb.append("alipay_point").append(",");//付款时使用的支付宝积分的额度,单位分，比如返回1，则为1分钱
		sb.append("pcc_af").append(",");//天猫点券卡实付款金额,单位分
		sb.append("o2o_out_trade_id").append(",");//外部订单号
		sb.append("orders").append(",");//订单列表
		sb.append("trade_ext").append(",");//交易扩展表信息
		sb.append("hk_en_name").append(",");//拼音名
		sb.append("hk_flight_no").append(",");//航班号
		sb.append("hk_china_name").append(",");//中文名
		sb.append("hk_card_code").append(",");//证件号码
		sb.append("hk_card_type").append(",");//证件类型001代表港澳通行证类型、002代表入台证003代表护照
		sb.append("hk_flight_date").append(",");//航班飞行时间
		sb.append("hk_gender").append(",");//性别M: 男性，F: 女性
		sb.append("hk_birthday").append(",");//出生日期
		sb.append("hk_pickup").append(",");//提货地点
		sb.append("hk_pickup_id").append(",");//提货地点id
		sb.append("eticket_service_addr").append(",");//天猫电子凭证家装
		sb.append("is_wt").append(",");//表示订单交易是否网厅订单。 如果该订单是网厅订单，那么该值为true；反之，该值为false。
		sb.append("is_sh_ship").append(",");//是否屏蔽发货
		sb.append("o2o_snatch_status").append(",");//抢单状态 0,未处理待分发;1,抢单中;2,已抢单;3,已发货;-1,超时;-2,处理异常;-3,匹配失败;-4,取消抢单;-5,退款取消;-9,逻辑删除
		sb.append("market").append(",");//垂直市场
		sb.append("et_type").append(",");//电子凭证扫码购-扫码支付订单type
		sb.append("et_shop_id").append(",");//扫码购关联门店
		sb.append("obs").append("");//门店预约自提订单标
		sb.append("is_sh_ship").append("");//
		sb.append("shipper").append("");//
		sb.append("store_code").append("");//
		
		return sb.toString();
	}
}
